package basic

import (
	"reflect"
	"sync"
)

// MutexState 解析 sync.Mutex 的 state 字段
func MutexState(m *sync.Mutex) (locked, woken bool, sema int) {
	// 获取 sync.Mutex 结构体的值
	val := reflect.ValueOf(*m).FieldByName("state").Int()

	// 解析 state 字段的各个位
	locked = (val & 1) != 0
	woken = (val & 2) != 0
	sema = int((val >> 2) & ((1 << 30) - 1)) // 假设最多支持 30 位的 sema

	return
}
